# 背景，经常打开pdf复制论文材料什么的，但是老是换行和有空格，自编了一个小程序，平时使用；


with open('C:/Users/JHC-YY/Desktop/jhc.txt','r+',encoding="utf-8") as f:
    str=''
    for line in f.readlines():
        # f.readlines 按照行读句子
        line=line.replace('\n','') # 如果有换行，则替换

        # 以下的语句是用于查找 字符串中的‘空格’的
        # 找到空格后，还需要判断，之前的是否为英文
        str_1=line
        store_index = []  # 存储 空格位置的字符串
        judge_number = 1  # 判断是否退出循环。如果find没有找到，则=-1，之后退出循环；
        find_start = 0  # 初始化 空格位置
        guide_num = 1  # 预防陷入无限循环的；
        while judge_number != -1:
            str_null_index = str_1.find(' ', find_start)  # 从字符串中查找 ‘空格’
            find_start = str_null_index + 1  # 如果找到，则前进一位，继续查找
            judge_number = str_null_index  # 判断是否结束循环
            if str_null_index == -1:  # 如果没有找到，直接退出循环
                break
            # 以下内容是判断 空格 前是否为字母，如果为字母，则默认是英文
            # 如果是英文，空格保留，如果不是，空格去除
            if str_null_index == 0:
                store_index.append(str_null_index)  # 存储位置字符串
            else:
                if 'a' <= str_1[str_null_index - 1] <= 'z' or 'A' <= str_1[str_null_index - 1] <= 'Z':
                    guide_num + 1
                else:
                    store_index.append(str_null_index)  # 存储位置字符串
            # 保险退出循环的
            guide_num = guide_num + 1
            if guide_num > 1000:
                break

        # 以下程序的代码时完成，将str转化为list；
        # 将list里面的空格转为 空；使用for循环
        str_1_list = list(str_1)  # 字符串变为列表；
        for i in store_index:  # 将空格的index循环
            str_1_list[i] = ''  # 改变空格为空；
        str_1= ''.join(str_1_list)  # 将list变为字符串

        str=str+str_1 # 将所有的句子组合到一起

# print(str)
f.close()

with open('C:/Users/JHC-YY/Desktop/jhc.txt','w',encoding="utf-8") as f:
    f.write(str)
#print(str)
f.close()

'''
# 这边，我将编写一个循环，循环结束的条件是 b=-1;
# 查找 空格 的字体；如果找到，则判断，字体的前面是否是

# 需要注意，str有find和index；但是list没有find
# index的方法，必须有，如果没有，则报错；

# index() 的语法格式为：
# listname.index(obj, start, end)
# 其中，listname 表示列表名称，obj 表示要查找的元素，start 表示起始位置，end 表示结束位置。；
# 注意，start是包含这个在内的；
# start 和 end 参数用来指定检索范围：
# start 和 end 可以都不写，此时会检索整个列表；
# 如果只写 start 不写 end，那么表示检索从 start 到末尾的元素；
# 如果 start 和 end 都写，那么表示检索 start 和 end 之间的元素。

# 函数原型：find(str, pos_start, pos_end)
# str:被查找“字符串”
# pos_start:查找的首字母位置（从0开始计数。默认：0）
# pos_end: 查找的末尾位置（默认-1）
# 返回值：如果查到：返回查找的第一个出现的位置。
# 否则，返回-1。

# b=str_1.find('元')
# print('b是',b)
# str_1[b]

# isalpha ( )	判断是否全是字母
# isdigit ( )	判断是否全是数字
# isalnum ( )	是否全是数字或字母
# isupper ( )	... 大写字母
# islower ( )	... 小写字母
# istitle ( )	... 首字母大写
# isspace()	... 空白字符
'''